all files / src/ TokenKind.js

75% Statements 18/24
30% Branches 3/10
33.33% Functions 2/6
75% Lines 18/24
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162                                                                                                                                                                                                                                            141× 141× 141× 141× 24×         141× 141×                                       96×        
/*
 * Copyright 2002-2015 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 
/**
 * @author Andy Clement
 * @author Ben March
 * @since 0.2.0
 */
 
var types = {
 
    LITERAL_INT: 1,             //tested
 
    LITERAL_LONG: 2,            //tested
 
    LITERAL_HEXINT: 3,          //tested
 
    LITERAL_HEXLONG: 4,         //tested
 
    LITERAL_STRING: 5,          //tested
 
    LITERAL_REAL: 6,            //tested
 
    LITERAL_REAL_FLOAT: 7,      //tested
 
    LPAREN: '(',                //tested
 
    RPAREN: ')',                //tested
 
    COMMA: ',',                 //tested
 
    IDENTIFIER: 0,              //tested
 
    COLON: ':',                 //tested
 
    HASH: '#',                  //tested
 
    RSQUARE: ']',               //tested
 
    LSQUARE: '[',               //tested
 
    LCURLY: '{',                //tested
 
    RCURLY: '}',                //tested
 
    DOT: '.',                   //tested
 
    PLUS: '+',                  //tested
 
    STAR: '*',                  //tested
 
    MINUS: '-',                 //tested
 
    SELECT_FIRST: '^[',         //tested
 
    SELECT_LAST: '$[',          //tested
 
    QMARK: '?',                 //tested
 
    PROJECT: '![',              //tested
 
    DIV: '/',                   //tested
 
    GE: '>=',                   //tested
 
    GT: '>',                    //tested
 
    LE: '<=',                   //tested
 
    LT: '<',                    //tested
 
    EQ: '==',                   //tested
 
    NE: '!=',                   //tested
 
    MOD: '%',                   //tested
 
    NOT: '!',                   //tested
 
    ASSIGN: '=',                //tested
 
    INSTANCEOF: 'instanceof',   //test fails
 
    MATCHES: 'matches',         //test fails
 
    BETWEEN: 'between',         //test fails
 
    SELECT: '?[',               //tested
 
    POWER: '^',                 //tested
 
    ELVIS: '?:',                //tested
 
    SAFE_NAVI: '?.',            //tested
 
    BEAN_REF: '@',              //tested
 
    SYMBOLIC_OR: '||',          //tested
 
    SYMBOLIC_AND: '&&',         //tested
 
    INC: '++',                  //tested
 
    DEC: '--'                   //tested
};
 
function TokenKind(type) {
    this.type = type;
    this.tokenChars = types[type];
    this._hasPayload = typeof types[type] !== 'string';
    if (typeof types[type] === 'number') {
        this._ordinal = types[type];
    }
}
 
//create enum
for (var t in types) {
    if (Etypes.hasOwnProperty(t)) {
        TokenKind[t] = new TokenKind(t);
    }
}
 
TokenKind.prototype.toString = function () {
    return this.type + (this.tokenChars.length !== 0 ? '(' + this.tokenChars + ')' : '');
};
 
TokenKind.prototype.getLength = function () {
    return this.tokenChars.length;
};
 
TokenKind.prototype.hasPayload = function () {
    return this._hasPayload;
};
 
TokenKind.prototype.valueOf = function (id) {
    for (var t in types) {
        if (types.hasOwnProperty(t) && types[t] === id) {
            return TokenKind[t];
        }
    }
};
 
TokenKind.prototype.ordinal = function () {
    return this._ordinal;
};
 
export {TokenKind};